package com.unknowpupil.design.sigleton;

import java.io.Serializable;

/**
 * @Description: <br/>
 * <p>
 * 单例懒汉式
 * 问题: 资源利用效率高了，但是每次调用 getInstance()方法都要同步，并发效率极低
 * 优点：延迟加载 懒加载真正用到的时候再加载
 * </p>
 * @Author: <a> w10g </a>
 * @CreateDate: Create in 2020/4/24 16:32
 * @Classname: LazySingleton
 * @Version: 1.0
 */
public class LazySingleton implements Serializable {
    /**
     * 2 提供静态属性
     * 初始化时候，不立即加载 用的时候在实例化
     */
    private static LazySingleton instance;

    /**
     * 1 私有构造，不让别人访问
     */
    private LazySingleton() {
//        if(instance!=null){
//            throw  new Exception();
//        }
    }

    /**
     * 这方法需要同步
     *  因为在并发多的时候可能会实例多个对象
     *  多个线程调用需要排队
     * @return
     */
    public static synchronized LazySingleton getInstance()  {
        if (instance == null) {
            return new LazySingleton();
        }
        return instance;

    }
    /**
     *    反序列化的时，直接调用方法返回对象。 这样就防止反序列化漏洞。
     */
    private Object readResolve() {
        return instance;
    }

}
